如果你打開其他人的elm code 常常會看到這些符號,或是在其他的functional programming 也常有這些符號。 (<<)
, 其實在 haskell裡就是 (.)
, (<|)
在 haskell 裡就是 ($)
, 而 (|>)
和 (<|)
在elixir也有,叫 pipe operator,我們在json decoder 裡時也有用到這個符號。
Elm兩個都有也是很有趣的,haskell 只有類似 (<|) 的 function。其實很簡單,就想想你要省略括號就是了,譬如
leftAligned (monospace (fromString "code"))
leftAligned <| cmonospace <| fromString "code"
這樣就不用寫很多括號,而 (|>)
就是反過來就是啦。
"code"
|> fromString
|> cmonospace
|> leftAligned
這樣也比較直覺,也就是說,你先把"code" 給fromString處理,完了之後在當 cmonospace
的argument,再處理完給leftAligned
(<<) : (b -> c) -> (a -> b) -> a -> c
(>>) : (a -> b) -> (b -> c) -> a -> c
這個在你高中數學一定會學過,把兩個涵數合併在一起 f(g(x)),我們寫成elm就可以寫成 (g << f) == (\x -> g ( f x))
, 我們習慣的是 (<<)
, 但如果你想要反過來表達的話就是 (>>)
如果你在javascript知道 Currying
的話, composition就是在這個時候用上的,譬如 not << isEven << sqrt
,這個我們傳入 5 和 6。